package com.hsh.acte 
{
	import flash.display.InteractiveObject;
	import flash.display.Stage;
	/**
	 * Action générique sur un Actif
	 * @author Jean-Marie@home
	 */
	public class Action 
	{
		private var ed:InteractiveObject;
		private var listener:Function;
		protected var a:Actif;
		protected var _action:Function;
		protected var _type:String;
		
		/**
		 * Action générique sur un actif (parent de Souris et de ses dérivés)
		 * @param	actif	actif à surveiller
		 * @param	ecouteur	réaction(a:actif, e:Event) à cette surveillance
		 */
		public function Action(actif:Actif, ecouteur:Function) 
		{
			a = actif;
			ed = a.diffuseur;
			listener = ecouteur;
		}
		
		/**
		 * Désactive l'action et annule tout
		 */
		public function detruire():void
		{
			desactiver();
			ed = null;
			listener = null;
			a = null;
			_action = null;
			_type = null;
		}
		
		/**
		 * Commence l'écoute d'événement
		 */
		public function activer():void
		{
			desactiver();
			if (_type != null && _action != null)
			{
				ed.addEventListener(_type, listener);
			} 
		}
		
		/**
		 * Arrête l'écoute d'événement
		 */
		public function desactiver():void
		{
			if (_type != null && _action != null)
			{
				ed.removeEventListener(_type, listener);
			}
		}
		
		/**
		 * Scène sur laquelle se trouve le diffuseur
		 */
		public function get scene():Stage
		{
			return ed.stage;
		}
		
		/**
		 * Réaction à l'action
		 */
		public function get action():Function 
		{
			return _action;
		}
		
		public function set action(value:Function):void 
		{
			_action = value;
		}
		
		/**
		 * Type d'événement ("click" ? "rollOut" ?...)
		 */
		public function get type():String 
		{
			return _type;
		}
		
		public function set type(value:String):void 
		{
			_type = value;
			a.gerer(this);
		}
	}
}